package com.oa.system.mapper;

import com.baomidou.mybatisplus.plugins.Page;
import com.oa.system.dto.MailListDTO;
import com.oa.system.dto.UserListDTO;
import com.oa.system.entity.Post;
import com.oa.system.entity.User;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.oa.system.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author syb123
 * @since 2019-01-29
 */
@Repository
public interface UserMapper extends BaseMapper<User> {

    /**
     * 查询所有列表
     *
     * @return
     */
    List<User> findList();

    /**
     * 根据条件查询用户列表--无分页
     *
     * @param userName
     * @param name
     * @param createTime
     * @param organizationName
     * @return
     */
    List<UserVO> findUserListByCondition(@Param("userName") String userName,
                                         @Param("name") String name,
                                         @Param("createTime") String createTime,
                                         @Param("organizationName") String organizationName);

    /**
     * 根据条件查询用户列表--分页
     *
     * @param page
     * @param userName
     * @param name
     * @param createTime
     * @param organizationName
     * @return
     */
    List<UserVO> findUserListByCondition(Page<Post> page,
                                         @Param("userName") String userName,
                                         @Param("name") String name,
                                         @Param("createTime") String createTime,
                                         @Param("organizationName") String organizationName);

    /**
     * 根据id查询用户详情
     *
     * @param id
     * @return
     */
    UserDetailsVO findUserDetailsById(String id);

    List<UserListVO> findUserList(Page page, UserListDTO userListDTO);

    List<MailListVO> findMailList(Page page, MailListDTO mailListDTO);

    List<UserByOrganizationVO> findUserByOrganization(@Param("departmentId") String departmentId, @Param("companyId") String companyId);

    Integer findRanking(@Param("id") String id, @Param("createTimeYear") String createTimeYear);
}
